package br.com.mubi.review;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import br.com.mubi.util.FacesUtil;

@ManagedBean
@SessionScoped
public class FilmeBean {
	
	private List<ClassificacaoEtaria> classificacao;
	private FilmeRN filmeRN;
	private String tituloInclusaoAlteracao;
	
	public FilmeBean() {
		carregarImagensClassificacao();
		setFilmeRN(new FilmeRN());
	}

	@PostConstruct
	public void listarFilmesHoje(){
		filmeRN.listarFilmesIncluidosHoje();
	}
	
	public String carregarPaginaInclusao() {
		tituloInclusaoAlteracao = "Incluir Filme";
		filmeRN.setFilme(new Filme());
		filmeRN.setContinuacao(false);
		return "/restrito/incluirFilmes.jsf";
	}
	
	public String carregarPaginaAlteracao() {
		tituloInclusaoAlteracao = "Alterar Filme";
		return "/restrito/incluirFilmes.jsf";
	}
	
	public void excluirReview() {
		filmeRN.excluirReview(FacesContext.getCurrentInstance());
	}
	
	public void carregarImagensClassificacao() {
		classificacao = new ArrayList<ClassificacaoEtaria>();
		classificacao.add(new ClassificacaoEtaria("Livre", "classificacaoLivre.png"));
		classificacao.add(new ClassificacaoEtaria("Maior de 10 anos", "classificacao10.png"));
		classificacao.add(new ClassificacaoEtaria("Maior de 12 anos", "classificacao12.png"));
		classificacao.add(new ClassificacaoEtaria("Maior de 14 anos", "classificacao14.png"));
		classificacao.add(new ClassificacaoEtaria("Maior de 16 anos", "classificacao16.png"));
		classificacao.add(new ClassificacaoEtaria("Maior de 18 anos", "classificacao18.png"));
	}

	public void validarContinuacao() {
		boolean continuaInclusao;
		continuaInclusao = filmeRN.continuarInclusao();
		if(!continuaInclusao){
			FacesUtil.addGrowlMessage(FacesContext.getCurrentInstance(), "Favor preencher todos os campos.");
		}
	}
		
	public void enviarArquivo(FileUploadEvent evento) {
		UploadedFile arquivo = evento.getFile();
		if(arquivo != null) {
			filmeRN.setArquivoImagem(arquivo);
			filmeRN.getFilme().setNomeImagem((new Date()).getTime() + arquivo.getFileName());
			FacesUtil.addGrowlMessage(FacesContext.getCurrentInstance(), "Imagem enviada.");
		} 
	}
	
	public String salvarReview() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		if(filmeRN.validarInclusao(context)) {
				filmeRN.tratarLinkVideo();
				filmeRN.salvarReview(FacesContext.getCurrentInstance());
				filmeRN.fileUpload(FacesContext.getCurrentInstance());
				filmeRN.setFilme(new Filme());
				filmeRN.setContinuacao(false);			
				FacesUtil.addGrowlMessage(context, "Resenha cadastrada com sucesso.");
				
				return filmeRN.listarTodosFilmesUsuario();
		}
		return "";
	}
	
	public void votar() {
		this.filmeRN.salvarNota();
		this.filmeRN.calcularMedia();
		this.filmeRN.setVotou(true);
	}
	
	public List<ClassificacaoEtaria> getClassificacao() {
		return classificacao;
	}

	public void setClassificacao(List<ClassificacaoEtaria> classificacao) {
		this.classificacao = classificacao;
	}

	public FilmeRN getFilmeRN() {
		return filmeRN;
	}

	public void setFilmeRN(FilmeRN filmeRN) {
		this.filmeRN = filmeRN;
	}

	public String getTituloInclusaoAlteracao() {
		return tituloInclusaoAlteracao;
	}

	public void setTituloInclusaoAlteracao(String tituloInclusaoAlteracao) {
		this.tituloInclusaoAlteracao = tituloInclusaoAlteracao;
	}
}
